package tiempo;


public class Cronometro extends Thread {
	private ICronometrado objetoACronometrar;

	private Long tiempoEnMilisegundos;
	private Long tiempoAgregado;
	
	public Cronometro(ICronometrado objeto, Long milisegundos) {
		objetoACronometrar = objeto;
		tiempoEnMilisegundos = milisegundos;
		tiempoAgregado = new Long(0);
	}
	
	@Override
	public void run() {
		Long tiempoAEsperar = this.tiempoEnMilisegundos;
		while (tiempoAEsperar > 0) {
			
			Long tiempoFin = System.currentTimeMillis() + tiempoAEsperar;
			
			while (System.currentTimeMillis() < tiempoFin) {
				try {
					Thread.sleep(10);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
			
			if (tiempoAgregado > 0) {
				tiempoAEsperar = tiempoAgregado;
				tiempoAgregado = new Long(0);
			} else {
				tiempoAEsperar = new Long(0);;
			}
		} 
		
		objetoACronometrar.timeOut();
	}
	
	public void agregarTiempo(Long milisegundos) {
		tiempoAgregado += milisegundos;
	}
	
	public void setObjetoACronometrar(ICronometrado objetoACronometrar) {
		this.objetoACronometrar = objetoACronometrar;
	}
}
